package com.demo.my_util.table_md;

import javax.sql.DataSource;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.generator.ColumnMeta;
import com.jfinal.plugin.activerecord.generator.DataDictionaryGenerator;
import com.jfinal.plugin.activerecord.generator.TableMeta;

/**
 * Markdown表格格式数据字典
 */
public class MarkdownDataDictionaryGenerator extends DataDictionaryGenerator {

    public MarkdownDataDictionaryGenerator(DataSource dataSource, String dataDictionaryOutputDir) {
        super(dataSource, dataDictionaryOutputDir);
    }

    @Override
    protected void generateTable(TableMeta tableMeta, StringBuilder ret) {
        if (StrKit.notBlank(tableMeta.remarks)) {
            ret.append("## ").append(tableMeta.remarks).append("\n").append("\n");
        }
        ret.append("### 表名: ").append(tableMeta.name).append("\n").append("\n");
        genTableHead(tableMeta, ret);
        ret.append(genSeparateLine(tableMeta));
        for (ColumnMeta columnMeta : tableMeta.columnMetas) {
            genColumn(tableMeta, columnMeta, ret);
        }
        ret.append("\n");
    }

    @Override
    protected String genSeparateLine(TableMeta tm) {
        StringBuilder ret = new StringBuilder();
        genCell(tm.colNameMaxLen, "|", "---", "-", "|", ret);
        genCell(tm.colTypeMaxLen, "-", "---", "-", "|", ret);
        genCell("Null".length(), "-", "---", "-", "|", ret);
        genCell("Key".length(), "-", "---", "-", "|", ret);
        genCell(tm.colDefaultValueMaxLen, "-", "---", "-", "|", ret);
        genCell("Remarks".length(), "-", "---", "-", "|", ret);
        ret.append("\n");
        return ret.toString();
    }

    @Override
    protected void genTableHead(TableMeta tm, StringBuilder ret) {
        genCell(tm.colNameMaxLen, "|", "字段名", " ", "|", ret);
        genCell(tm.colTypeMaxLen, " ", "数据类型", " ", "|", ret);
        genCell("允许空".length(), " ", "允许空", " ", "|", ret);
        genCell("键".length(), " ", "键", " ", "|", ret);
        genCell(tm.colDefaultValueMaxLen, " ", "默认值", " ", "|", ret);
        genCell("备注".length(), " ", "备注", " ", "|", ret);
        ret.append("\n");
    }

    @Override
    protected void genColumn(TableMeta tableMeta, ColumnMeta columnMeta, StringBuilder ret) {
        genCell(tableMeta.colNameMaxLen, "|", columnMeta.name, " ", "|", ret);
        genCell(tableMeta.colTypeMaxLen, " ", columnMeta.type, " ", "|", ret);
        genCell("Null".length(), " ", columnMeta.isNullable, " ", "|", ret);
        genCell("Key".length(), " ", columnMeta.isPrimaryKey, " ", "|", ret);
        genCell(tableMeta.colDefaultValueMaxLen, " ", columnMeta.defaultValue, " ", "|", ret);
        genCell("Remarks".length(), " ", columnMeta.remarks, " ", "|", ret);
        ret.append("\n");
    }


}